import random


# 元素统计
# 语法格式： 列表名.count(元素)
# 统计某元素出现的次数，如果元素不存在，返回0

# 定义列表
data_list = ['python', 'java', 'python', 'php']
# 统计python出现的次数
num = data_list.count("python")
print(num) # 次数：2
# 统计java出现次数
print(data_list.count("java")) # 次数：1
print(data_list.count("C++")) # 次数：0
# 结论：
# 统计列表元素出现的次数
# 元素不存在统计结果为0



# 列表元素增加：末尾增加元素
# 语法格式： 列表名.append(元素)
# 列表类型属于可变类型，新增元素后，对原有数据进行了修改
# 增加元素默认会增加到列表的末尾 ,每次增加一个

# 定义列表
val_list = ["Web自动化", "UI自动化", "接口自动化"]
# 添加元素（末尾添加：APP自动化）
val_list.append("APP自动化")
# 查看原来列表
print(val_list)
# 增加数字元素
val_list.append(11)
print(val_list)
# 结论：
# 列表属于可变数据类型，增加元素后，原有的列表的值会发生变化
# 追加元素每次只能追加1个，而且每次追加的位置在列表的末尾

#列表名.pop(索引),根据索引删除元素
# 删除不传入索引时，默认删除列表最后一个数据（元素）
# 删除传入的索引不存在（超出范围）时，代码报错
val_list = ["Web自动化", "UI自动化", "接口自动化"]
val_list.pop(0)
print(val_list)
val_list.pop()
print(val_list)

#列表名.remove(元素),根据元素删除元素
# 列表中存在多个该元素使，删除第一个匹配到的
# 如果删除的元素在列表不存在，代码会报错
val_list = ["Web自动化", "UI自动化", "接口自动化"]
val_list.remove("Web自动化")
print(val_list)



# 语法格式： 列表名.sort(reverse=False)
# 注意事项：
# 对列表元素默认从小到大排序，即reverse=False
# 对列表元素从大到小排序，需要修改reverse=True

# 定义列表
info = [8, 100, 30, 10, 40, 2]
# 从小到大排序
info.sort()
info.sort(reverse=False)
# 查看原有列表
print(info)
# 从大到小排序
info.sort(reverse=True)
print(info)
# 结论：
# 1.sort内部有常见两个参数，key:表示按照哪个指标排序（key的值必须是一个函数），reverse:表示排序规则（升序/降序）
# 2.reverse=False表示升序（默认可以不写）；如果reverse=True表示降序




# 元组和列表区别
# 表示形式不同，元组用小括号，列表用中括号；
# 表示单个元组元素时，元素后必须加 ,
# 操作数据本质不同，元组是不可变数据类型，列表是可变数据类型



# 字典中取值
# 语法格式：
# 格式1： 变量 = 字典名[键]
# 格式2： 变量 = 字典名.get(键)
# 注意事项：
# 格式1键存在返回对应值，键不存在，则代码报错
# 格式2键存在返回对应值，键不存在，则返回None（空值）

# 定义非空字典
info = {
"name": "tom",
"age": 18,
"gender": "男",
"hobby": {"read": "小说", "sport": ["篮球", "足球"]}
}
# 查询年龄
# a1 = info["age"]
# print(a1)
print(info["age"])
# a2 = info.get("age")
# print(a2)
print(info.get("age"))
# 查询键aa的值
# print(info["aa"]) # 代码报错：KeyError: 'aa' 键aa不存在
print(info.get("aa")) # None 表示aa键不存在
# 思考：如何获取值："足球"
a1 = info["hobby"]
print(a1) # {'read': '小说', 'sport': ['篮球', '足球']}
print(a1["sport"]) # ['篮球', '足球']
print(a1["sport"][1])
# 组合:从外部一层一层获取递进
print(info["hobby"]["sport"][1])
print(info.get("hobby").get("sport")[1])


# 字典的合并/新增
# 语法格式： 字典2.update(字典1)
# 注意事项：字典2中如果存字典1的键则被更新，否则被新增

# 定义字典1
dict1 = {"name": "张三", "age": 18}
# 定义字典2
dict2 = {"height": 1.88}
# 将字典2合并到字典1
dict1.update(dict2)
print(dict1)






# 定义非空字典
info = {
"name": "tom",
"age": 18,
"gender": "男"
}
# 遍历获取字典中所有键
for i in info.keys():#字典名.keys(),键名
    print(f"字典的键是：{i}")
# 遍历获取字典中所有值
for i in info.values():#字典名.vlaues(),键值
    print(f"字典的值是：{i}")
# 遍历获取字典的键和值
for k, v in info.items():
    print(f"{k} = {v}")



# 集合元素添加
# 语法格式： 集合.add(元素)
# 列表元素去重
# 语法格式： 变量 = set(列表名)

# 1.定义空集合
info = set()
print(info)
# 2.集合中添加元素："a"
info.add("a")
info.add("b")
print(info)
# 定义非空字符串
var = "abcdeabdcdf"
# 3.打印非重复的元素
print(set(var)) # 转换为集合去重 # {'c', 'f', 'e', 'a', 'b', 'd'}
tmp = list(set(var)) # 再转换为列表
tmp.sort() # 再进行排序
print(tmp) # ['a', 'b', 'c', 'd', 'e', 'f']
print("".join(tmp)) # 还原成字符串：abcdef(字符串连接)



# 切片操作
i = 10
int = [1,2,3,4,5,6,7,8,9,10]
int_1 = [1,2,3,4,5,6,7,8,9,10]
list = []

# while i < 10:
#     int.append(random.randint(1,10))
#     i += 1

print(int[-7:-9:-1])

while i > 0:
    i -= 1
    print(int[:i+1])
    # print(int[::-1])
    print(int[i::-1])